/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Principals.Constantes;
import Model.Perfil;
import Model.Usuario;
import Presenter.UsuarioPresenter;
import Principals.Main;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Transaction;

/**
 *
 * @author DeveloperPostgre
 */
public class PerfilDAO {

    public static List<Perfil> buscarPerfil(String nombre, String descripcion) {
        String q = "from Perfil where Estado = 1";
        int cont = 0;
        if (nombre != null || descripcion != null) {
            q += " and";
        }
        if (nombre != null) {
            q += " lower(nombre) LIKE :nombres";
            cont++;
        }
        if (descripcion != null) {
            if (cont > 0) {
                q += " AND ";
            }
            q += " lower(descripcion) LIKE :descripcion";
        }

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);

        if (nombre != null) {
            query.setParameter("nombres", "%" + nombre.toLowerCase() + "%");
        }

        if (descripcion != null) {
            query.setParameter("descripcion", "%" + descripcion.toLowerCase() + "%");
        }

        Main.usrSesion.session.getTransaction().commit();
        return query.list();
    }

    public static Perfil registrarPerfil(Perfil p) {
        try{
            Main.usrSesion.session.beginTransaction();
            Transaction tx = Main.usrSesion.session.getTransaction();
            Main.usrSesion.session.save(p);
            tx.commit();
        }catch( Exception e ){
            
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "perfil", p.getIdPerfil() + "->" + p.getDescripcion(), Constantes.LOG_INSERT);
        }
        return p;
    }

    public static Perfil buscarPerfil(int idPerfil) {
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Perfil where id_perfil = :id");
        query.setParameter("id", idPerfil);

        Perfil perfil = (Perfil) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();
        return perfil;
    }

    public static boolean buscarUsuariosEnPerfil(int idPerfil) {
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Usuario where id_perfil = :perfil and estado_sesion = 1");
        query.setParameter("perfil", idPerfil);
        
        Main.usrSesion.session.getTransaction().commit();
        
        List<Usuario> usuarios = query.list();
        
        if (usuarios.size()>0){
            return true;
        } else {
            return false;
        }
    }

    public static int buscarIdPerfil(String nombre, String descripcion) {
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Perfil where nombre = :nombre and descripcion = :descripcion");
        query.setParameter("nombre", nombre);
        query.setParameter("descripcion", descripcion);

        Perfil perfil = (Perfil) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();
        return perfil.getIdPerfil();
    }

    public static Perfil cargarPerfil(int idPerfil) {
        String q = "from Perfil where id_perfil = :id";
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        query.setParameter("id", idPerfil);
        Perfil p = (Perfil) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();
        return p;
    }

    public static void updatePerfil(Perfil p) {
        try{
            Main.usrSesion.session.beginTransaction();
            Transaction tx = Main.usrSesion.session.getTransaction();
            Main.usrSesion.session.update(p);
            tx.commit();
        }catch( Exception e ){
            
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "perfil", p.getIdPerfil() + "->" + p.getDescripcion(), Constantes.LOG_UPDATE);
        }
    }
    
    public static List<Perfil> listPerfil(){
        Main.usrSesion.session.beginTransaction() ;
        Query query = Main.usrSesion.session.createQuery( "from Perfil where estado = 1" ) ;
        Main.usrSesion.session.getTransaction().commit() ;
        return query.list() ;
    }
}
